package sixth_day;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;

import static java.util.Arrays.sort;

/**
 * 一个整型数组里除了两个数字之外，其他的数字都出现了两次。请写程序找出这两个只出现一次的数字。
 */
public class FindOnce {
    public static void main(String[] args) {
        int[] arr = new int[]{1, 2, 1, 2, 3, 5, 4, 5, 6, 6}; // 1,1,2,2,3,4,4,5,5,6
        System.out.println(Arrays.toString(findOnceNumber(arr)));
    }

    /**
     * 返回包含这两个数字的数组
     * @param arr
     * @return
     */
    public static Object[] findOnceNumber(int[] arr) {
        int l = arr.length;
        List<Integer> res = new ArrayList<>();
        sort(arr);
        // 每次只取两个
        for (int i = 0; i < l - 1;) {
            if ((arr[i] ^ arr[i + 1]) == 0) {
                i += 2;
            }else {
                res.add(arr[i]);
                i += 1;
            }
        }
        // 特殊情况：其中一个为最大值
        if ((arr[l - 1] ^ arr[l - 2]) != 0) {
                res.add(arr[l - 1]);
        }
        return res.toArray();
    }
}
